/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package persistencia;


import java.io.FileNotFoundException;
import java.io.IOException;
import videogest.Empleado;
import java.sql.*;
import videogest.CategoriaPersona;

/**
 *
 * @author Administrador
 */
public class persistenciaEmpleado {

    public static void alta(Empleado empleado) {
         int i=0;
         //System.out.println("Enviado a la base de datos...");
         Connection con = null;
         Statement st =  null;
         try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");
            st = (Statement) con.createStatement();
            String sSql;
            sSql = "insert into empleado values('" + empleado.getCodigo() + "','"+empleado.getClave()+"','" + empleado.getNombre()
                    + "','" + empleado.getDireccion() + "','" + empleado.getTelefono() + "','" + empleado.getEmail() + "','" + empleado.getDNI()
                    + "','" + empleado.getCategoria() + "','"+empleado.isBaja()+"')";

            i = st.executeUpdate(sSql);
           //System.out.println(i);
        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciación. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex);
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        }finally{
            try {
                st.close();
                con.close();
            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexión. Detalle del Error!!");
                System.out.println(ex);
            }
        }

        if(i>0){
            System.out.println("Se ha grabado correctamente la inserción en la base de datos...");
        }else{
            System.out.println("¡ERROR! No se ha podido grabar la inserción en la base de datos.");
        }
    }

    public static void modificar(Empleado empleado) {
         int i=0;
         Connection con = null;
         Statement st =  null;
         try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");
            st = (Statement) con.createStatement();
            String sSql;
            sSql = "update empleado set clave='"+empleado.getClave()+"',nombre='" + empleado.getNombre()
                    + "', direccion='" + empleado.getDireccion() + "',telefono='" + empleado.getTelefono() + "',email='" + empleado.getEmail() + "',dni='" + empleado.getDNI()
                    + "', categoria='" + empleado.getCategoria() + "',baja='"+empleado.isBaja()+"'"
                    + " where codigo='"+empleado.getCodigo()+"';";

            i = st.executeUpdate(sSql);
           //System.out.println(i);
        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciación. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex);
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        }finally{
            try {
                st.close();
                con.close();
            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexión. Detalle del Error!!");
                System.out.println(ex);
            }
        }

        if(i>0){
            System.out.println("Se ha grabado correctamente la modificación en la base de datos...");
        }else{
            System.out.println("¡ERROR! No se ha podido grabar la modificación en la base de datos.");
        }
    }

    public static Empleado dameEmpleado(String codigo) throws FileNotFoundException, IOException{
         Empleado empleado = null;
        String codigoE = null;
        String clave = null;
        String nombre = null;
        String direccion = null;
        String telefono = null;
        String email = null;
        String dni = null;
        CategoriaPersona categoria = null;
        boolean baja = false;
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");
            st = (Statement) con.createStatement();
            rs = st.executeQuery("select * from empleado where codigo='" + codigo + "';");

            /*
             * Este while recorre el resultado de la consulta (que deberá devolver un solo registro)
             * e introduce cada campo en cada atributo para despues crear el cliente con esos valores.
             */
            while (rs.next()) {
                codigoE = rs.getString("codigo");
                clave = rs.getString("clave");
                nombre = rs.getString("nombre");
                direccion = rs.getString("direccion");
                telefono = rs.getString("telefono");
                email = rs.getString("email");
                dni = rs.getString("dni");
                categoria = CategoriaPersona.valueOf(rs.getString("categoria"));
                baja = Boolean.parseBoolean(rs.getString("baja"));
            }

            // esto comprueba si se ha obtenido el cliente con este codigo, sino, queda el cliente a null
            if(codigoE!=null){
                empleado = new Empleado(codigoE, clave, nombre, direccion, telefono, email, dni, categoria, baja);
            }

            //System.out.print(cliente);


        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciación. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex);
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        }finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexión. Detalle del Error!!");
                System.out.println(ex);
            }
        }
        return empleado;
    }

    public static Empleado dameEmpleado(String codigo, String clave) throws FileNotFoundException, IOException {
         Empleado empleado = null;
        String codigoE = null;
        String claveE = null;
        String nombre = null;
        String direccion = null;
        String telefono = null;
        String email = null;
        String dni = null;
        CategoriaPersona categoria = null;
        boolean baja = false;
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/videogest", "root", "root");
            st = (Statement) con.createStatement();
            rs = st.executeQuery("select * from empleado where codigo='" + codigo + "' and clave='"+clave+"';");

            /*
             * Este while recorre el resultado de la consulta (que deberá devolver un solo registro)
             * e introduce cada campo en cada atributo para despues crear el cliente con esos valores.
             */
            while (rs.next()) {
                codigoE = rs.getString("codigo");
                claveE = rs.getString("clave");
                nombre = rs.getString("nombre");
                direccion = rs.getString("direccion");
                telefono = rs.getString("telefono");
                email = rs.getString("email");
                dni = rs.getString("dni");
                categoria = CategoriaPersona.valueOf(rs.getString("categoria"));
                baja = Boolean.parseBoolean(rs.getString("baja"));
            }

            // esto comprueba si se ha obtenido el cliente con este codigo, sino, queda el cliente a null
            if(codigoE!=null){
                empleado = new Empleado(codigoE, claveE, nombre, direccion, telefono, email, dni, categoria, baja);
            }

            //System.out.print(cliente);


        } catch (InstantiationException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Instanciación. Detalle del error!!");
            System.out.println(ex);
        } catch (IllegalAccessException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de Acceso. Detalle del error!!");
            System.out.println(ex);
        } catch (SQLException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error de SQL. Detalle del error!!");
            System.out.println(ex);
        } catch (ClassNotFoundException ex) {
            //Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! No encuentra \"com.mysql.jdbc.Driver\". Detalle del error!!");
            System.out.println(ex);
        }finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException ex) {
                //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("Error de SQL, al cerrar la conexión. Detalle del Error!!");
                System.out.println(ex);
            }
        }
        return empleado;
    }




    

}
